home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Tools / Languages / Icon 8.1 / mep1 / External Functions / XCMDs⁄XFCNs / C Sources / XCmdGlue.c < prev   
Encoding:
C/C++ Source or Header  |  1990-08-15  |  11.8 KB  |  297 lines  |  [TEXT/KAHL]

  1. /*  XCmdGlue.c -  Definitions for calling all standard ProIcon
  2.  *    callback routines from C.  Include "IconXCmd.h" in your program,
  3.  *    and link in this file.
  4.  */
  5.  
  6. #include "IconXCmd.h"
  7.  
  8. /* SendCardMessage - Send a HyperCard message (a command with arguments) to the
  9.  * current card. msg is a pointer to a Pascal format string.
  10.  * Not supported by ProIcon.
  11.  */
  12. pascal void SendCardMessage(paramPtr,msg)
  13. XCmdBlockPtr    paramPtr;
  14. StringPtr        msg;
  15. {
  16.     paramPtr->inArgs[0] = (long)msg;
  17.     paramPtr->request = xreqSendCardMessage;
  18.     ((procPtr) (paramPtr->entryPoint))();
  19. }
  20.  
  21. /* Evaluate a HyperCard expression and return the answer.  The answer is
  22.  * a handle to a zero-terminated string.
  23.  * Not supported by ProIcon.
  24.  */
  25. pascal Handle EvalExpr(paramPtr,expr)
  26. XCmdBlockPtr    paramPtr;
  27. StringPtr        expr;
  28. {
  29.     paramPtr->inArgs[0] = (long)expr;
  30.     paramPtr->request = xreqEvalExpr;
  31.     ((procPtr) (paramPtr->entryPoint))();
  32.     return (Handle)paramPtr->outArgs[0];
  33. }
  34.  
  35.  
  36. /* Count the characters from where strPtr points until the next zero byte. 
  37.  * Does not count the zero itself.
  38.  * strPtr must be a zero-terminated string.
  39.  */
  40. pascal long StringLength(paramPtr,strPtr)
  41. XCmdBlockPtr    paramPtr;
  42. StringPtr    strPtr;
  43. {
  44.     paramPtr->inArgs[0] = (long)strPtr;
  45.     paramPtr->request = xreqStringLength;
  46.     ((procPtr) (paramPtr->entryPoint))();
  47.     return (long)paramPtr->outArgs[0];
  48. }
  49.  
  50.  
  51. /* Perform case-insensitive match looking for pattern anywhere in
  52.  * target, returning a pointer to first character of the first match,
  53.  * in target or NIL if no match found.
  54.  * pattern is a Pascal string,
  55.  * target is a zero-terminated string.
  56.  */
  57. pascal Ptr StringMatch(paramPtr,pattern,target)
  58. XCmdBlockPtr    paramPtr;
  59. StringPtr    pattern;
  60. Ptr    target;
  61. {
  62.     paramPtr->inArgs[0] = (long)pattern;
  63.     paramPtr->inArgs[1] = (long)target;
  64.     paramPtr->request = xreqStringMatch;
  65.     ((procPtr) (paramPtr->entryPoint))();
  66.     return (Ptr)paramPtr->outArgs[0];
  67. }
  68.  
  69.  
  70. /* Send a HyperCard message (a command with arguments) to HyperCard.
  71.  * msg is a pointer to a Pascal format string.
  72.  */
  73. pascal void SendHCMessage(paramPtr,msg)
  74. XCmdBlockPtr    paramPtr;
  75. StringPtr    msg;
  76. {
  77.     paramPtr->inArgs[0] = (long)msg;
  78.     paramPtr->request = xreqSendHCMessage;
  79.     ((procPtr) (paramPtr->entryPoint))();
  80. }
  81.  
  82.  
  83. /* Write zeros into memory starting at destPtr and going for longCount 
  84.  * number of bytes
  85.  */
  86. pascal void ZeroBytes(paramPtr,dstPtr,longCount)
  87. XCmdBlockPtr    paramPtr;
  88. Ptr    dstPtr;
  89. long    longCount;
  90. {
  91.     paramPtr->inArgs[0] = (long)dstPtr;
  92.     paramPtr->inArgs[1] = longCount;
  93.     paramPtr->request = xreqZeroBytes;
  94.     ((procPtr) (paramPtr->entryPoint))();
  95. }
  96.  
  97.  
  98.  
  99. /* Convert a Pascal string to a zero-terminated string.  Returns a handle
  100.  * to a new zero-terminated string.  The caller must dispose the handle,
  101.  * except for the result string.
  102.  */
  103. pascal Handle PasToZero(paramPtr,pasStr)
  104. XCmdBlockPtr    paramPtr;
  105. StringPtr    pasStr;
  106. {
  107.     paramPtr->inArgs[0] = (long)pasStr;
  108.     paramPtr->request = xreqPasToZero;
  109.     ((procPtr) (paramPtr->entryPoint))();
  110.     return (Handle)paramPtr->outArgs[0];
  111. }
  112.  
  113.  
  114. /* Fill the Pascal string with the contents of the zero-terminated string.
  115.  */
  116. pascal void ZeroToPas(paramPtr,zeroStr,pasStr)
  117. XCmdBlockPtr    paramPtr;
  118. char    *zeroStr;
  119. StringPtr    pasStr;
  120. {
  121.     paramPtr->inArgs[0] = (long)zeroStr;
  122.     paramPtr->inArgs[1] = (long)pasStr;
  123.     paramPtr->request = xreqZeroToPas;
  124.     ((procPtr) (paramPtr->entryPoint))();
  125. }
  126.  
  127.  
  128. /* Convert a string of ASCII decimal digits to an unsigned long integer.
  129.  */
  130. pascal long StrToLong(paramPtr,strPtr)
  131. XCmdBlockPtr    paramPtr;
  132. Str31Ptr strPtr;
  133. {
  134.     paramPtr->inArgs[0] = (long)strPtr;
  135.     paramPtr->request = xreqStrToLong;
  136.     ((procPtr) (paramPtr->entryPoint))();
  137.     return (long)paramPtr->outArgs[0];
  138. }
  139.  
  140.  
  141. /* Convert a string of ASCII decimal digits to a signed long integer.
  142.  * Negative sign is allowed.  Skips non-digit leading characters.
  143.  */
  144. pascal long StrToNum(paramPtr,str)
  145. XCmdBlockPtr    paramPtr;
  146. Str31Ptr      str;
  147. {
  148.     paramPtr->inArgs[0] = (long)str;
  149.     paramPtr->request = xreqStrToNum;
  150.     ((procPtr) (paramPtr->entryPoint))();
  151.     return paramPtr->outArgs[0];
  152. }
  153.  
  154.  
  155. /* Convert the Pascal strings 'true' and 'false' to booleans.
  156.  */
  157. pascal Boolean StrToBool(paramPtr,str)
  158. XCmdBlockPtr    paramPtr;
  159. Str31Ptr      str;
  160. {
  161.     paramPtr->inArgs[0] = (long)str;
  162.     paramPtr->request = xreqStrToBool;
  163.     ((procPtr) (paramPtr->entryPoint))();
  164.     return (Boolean)paramPtr->outArgs[0];
  165. }
  166.  
  167.  
  168. /* Convert a string of ASCII decimal digits to an extended long integer.
  169.  * myext is a pointer to an extended datum to hold the result.
  170.  */
  171. pascal void StrToExt(paramPtr,str,myext)
  172. XCmdBlockPtr    paramPtr;
  173. Str31Ptr      str;
  174. extended *    myext;
  175. {
  176.     paramPtr->inArgs[0] = (long)str;
  177.     paramPtr->inArgs[1] = (long)tr->inArgs[0] = (long)cardFieldFlag;
  178.     paramPtr->inArgs[1] = fieldID;
  179.     paramPtr->request = xreqGetFieldByID;
  180.     ((procPtr) (paramPtr->entryPoint))();
  181.     return (Handle)paramPtr->outArgs[0];
  182. }
  183.  
  184.  
  185. /* Set the value of field fieldName to be the zero-terminated string 
  186.  * in fieldVal.  The contents of the Handle are copied, so you must 
  187.  * still dispose it afterwards.
  188.  * Not supported.
  189.  */
  190. pascal void SetFieldByName(paramPtr,cardFieldFlag,fieldName,fieldVal)
  191.     XCmdBlockPtr    paramPtr;    Boolean    cardFieldFlag;
  192.     StringPtr    fieldName;    Handle    fieldVal;
  193. {
  194.     paramPtr->inArgs[0] = (long)cardFieldFlag;
  195.     paramPtr->inArgs[1] = (long)fieldName;
  196.     paramPtr->inArgs[2] = (long)fieldVal;
  197.     paramPtr->request = xreqSetFieldByName;
  198.     ((procPtr) (paramPtr->entryPoint))();
  199. }
  200.  
  201.  
  202. /* Set the value of field fieldNum to be the zero-terminated string 
  203.  * in fieldVal.  The contents of the Handle are copied, so you must 
  204.  * still dispose it afterwards.
  205.  * Not supported.
  206.  */
  207. pascal void SetFieldByNum(paramPtr,cardFieldFlag,fieldNum,fieldVal)
  208. XCmdBlockPtr    paramPtr;
  209. Boolean    cardFieldFlag;
  210. short    fieldNum;
  211. Handle    fieldVal;
  212. {
  213.     paramPtr->inArgs[0] = (long)cardFieldFlag;
  214.     paramPtr->inArgs[1] = fieldNum;
  215.     paramPtr->inArgs[2] = (long)fieldVal;
  216.     paramPtr->request = xreqSetFieldByNum;
  217.     ((procPtr) (paramPtr->entryPoint))();
  218. }
  219.  
  220.  
  221. /* Set the value of the field whose ID is fieldID to be the zero-
  222.  * terminated string in fieldVal.  The contents of the Handle are 
  223.  * copied, so you must still dispose it afterwards.
  224.  * Not supported.
  225.  */
  226. pascal void SetFieldByID(paramPtr,cardFieldFlag,fieldID,fieldVal)
  227. XCmdBlockPtr    paramPtr;
  228. Boolean    cardFieldFlag;
  229. short    fieldID;
  230. Handle    fieldVal;
  231. {
  232.     paramPtr->inArgs[0] = (long)cardFieldFlag;
  233.     paramPtr->inArgs[1] = fieldID;
  234.     paramPtr->inArgs[2] = (long)fieldVal;
  235.     paramPtr->request = xreqSetFieldByID;
  236.     ((procPtr) (paramPtr->entryPoint))();
  237. }
  238.  
  239.  
  240. /* Return true if the two strings have the same characters.  
  241.  * Case insensitive compare of the strings.
  242.  */
  243. pascal Boolean StringEqual(paramPtr,str1,str2)
  244. XCmdBlockPtr    paramPtr;
  245. Str31Ptr      str1;
  246. Str31Ptr      str2;
  247. {
  248.     paramPtr->inArgs[0] = (long)str1;
  249.     paramPtr->inArgs[1] = (long)str2;
  250.     paramPtr->request = xreqStringEqual;
  251.     ((procPtr) (paramPtr->entryPoint))();
  252.     return (Boolean)paramPtr->outArgs[0];
  253. }
  254.  
  255.  
  256. /* zeroStr points into a zero-terminated string.  Collect the 
  257.  * characters from there to the next carriage teturn and return 
  258.  * them in the Pascal string pasStr.  If a return is not found, 
  259.  * collect chars until the end of the string.
  260.  */
  261. pascal void ReturnToPas(paramPtr,zeroStr,pasStr)
  262. XCmdBlockPtr    paramPtr;
  263. Ptr    zeroStr;
  264. StringPtr    pasStr;
  265. {
  266.     paramPtr->inArgs[0] = (long)zeroStr;
  267.     paramPtr->inArgs[1] = (long)pasStr;
  268.     paramPtr->request = xreqReturnToPas;
  269.     ((procPtr) (paramPtr->entryPoint))();
  270. }
  271.  
  272.  
  273. /* Move the pointer scanPtr along a zero-terminated string
  274.  * until it points at a return character or a zero byte.
  275.  */
  276. pascal void ScanToReturn(paramPtr,scanHndl)
  277. XCmdBlockPtr    paramPtr;
  278. Ptr *    scanHndl;
  279. {
  280.     paramPtr->inArgs[0] = (long)scanHndl;
  281.     paramPtr->request = xreqScanToReturn;
  282.     ((procPtr) (paramPtr->entryPoint))();
  283. }
  284.  
  285.  
  286. /* Move the pointer scanPtr along a zero-terminated 
  287.  * string until it points at a zero byte.
  288.  */
  289. pascal void ScanToZero(paramPtr,scanHndl)
  290. XCmdBlockPtr    paramPtr;
  291. Ptr *    scanHndl;
  292. {
  293.     paramPtr->inArgs[0] = (long)scanHndl;
  294.     paramPtr->request = xreqScanToZero;
  295.     ((procPtr) (paramPtr->entryPoint))();
  296. }
  297.